// 开源的storage的库，对localStorage和sessionStorage的封装
import storage from 'good-storage'

// 把搜索的结果保存下来
// 定义存储搜索的key，_search_定义内部使用的key
const SEARCH_MAX_LENGTH = 6

/**
 * 数据插入方法
 * @param {Array} arr 存储的数据
 * @param {String} val 传入存储的值
 * @param {Function} compare 前后比较的函数
 * @param {Number} maxLen 存入的最大值
 */
function insertArray(arr, val, compare, maxLen) {
  // 找到就返回元素的位置，找不到就返回-1
  const index = arr.findIndex(compare)
  if (index === 0) {
    // 数据为数组中的第一个数据 不做任何操作
    return
  }
  if (index > 0) {
    // 数组中有这条数据并且不在第一个位置
    arr.splice(index, 1)
  }
  // 把该条数据放到数组中的第一个位置上
  arr.unshift(val)
  if (maxLen && arr.length > maxLen) {
    // 如果有条数限制并且数组的个数大于限制数
    arr.pop()
  }
}

/**
 * 保存搜索结果
 * @param {String} searchKey 存储键名
 * @param {String} queryStr 存储词
 */
export function saveSearch(searchKey, queryStr) {
  // 拿到当前的搜索结果
  let histroyList = storage.session.get(searchKey, [])
  // 存数逻辑是最后一次搜索的结果放到搜索历史的第一个
  insertArray(histroyList, queryStr, item => item === queryStr, SEARCH_MAX_LENGTH)
  // 设置新数据
  storage.session.set(searchKey, histroyList)
  return histroyList
}
